<?php

namespace App\Http\Controllers;

use App\Models\Game;
use Illuminate\Http\Request;
use App\Utils\Response;

// 假设你的响应类在这个命名空间下

class GameController extends Controller
{
    /**
     * 通过ID查询某个游戏信息
     *
     * @param int $id
     */
    public function show($id)
    {
        $game = Game::find($id);

        if (!$game) {
            return Response::fail(null, "不存在");
        }

        return Response::ok($game, null);
    }

    /**
     * 通过用户ID和指定的多个类型查询游戏信息，并通过类型分组返回
     *
     * @param Request $request
     * @param int $userId
     * @return \Illuminate\Http\JsonResponse
     */
    public function listByUserIdAndCodes(Request $request, $userId)
    {
        // 验证请求中的code数组// 从请求中获取codes字段，默认为空字符串
        $codesString = $request->input('codes', '');
        //使用逗号作为分隔符拆分字符串为数组
        $codes = explode(',', $codesString);
        //        // 去除数组中可能存在的空字符串（如果输入中有连续的逗号）
        $codes = array_filter($codes);
        if (empty($codes)) {
            return Response::fail(null, "未指定类型");
        }

        // 查找指定用户ID和code的游戏
        $games = Game::where('user_id', $userId)->whereIn('code', $codes)->get();

        // 分组，但注意Laravel集合没有直接的按字段分组成子数组的方法
        // 这里我们手动构建分组
        $groupedGames = [];
        foreach ($games as $game) {
            if (!isset($groupedGames[$game->code])) {
                $groupedGames[$game->code] = [];
            }
            $groupedGames[$game->code][] = $game;
        }

        return Response::ok($groupedGames, null);
    }

    /**
     * 通过ID删除游戏信息
     *
     * @param int $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function destroy($id)
    {
        $game = Game::find($id);

        if (!$game) {
            return Response::fail(null, "不存在");
        }

        $game->delete();

        return Response::ok(null, "删除成功");
    }

    /**
     * 通过ID修改游戏信息
     *
     * @param Request $request
     * @param int $id
     * @return \Illuminate\Http\JsonResponse
     */
    public function update(Request $request, $id)
    {
        $game = Game::find($id);

        if (!$game) {
            return Response::fail(null, "不存在");
        }

        // 验证并更新游戏信息
        $validatedData = $request->validate([
            'code' => 'string|nullable',
            'text' => 'string|nullable',
            'logo' => 'string|nullable',
            'stock' => 'integer|nullable',
            'weight' => 'integer|nullable',
            // 注意：通常不会允许用户更新user_id，除非有特定的业务逻辑允许
            // 'user_id' => 'integer|nullable', // 根据实际情况决定是否保留
        ]);

        // 只更新存在的字段
        $game->fill($validatedData);

        if ($game->save()) {
            return Response::ok($game, "更新成功");
        }
        return Response::fail(null, "更新失败");
    }

    public function create(Request $request)
    {
        // 验证请求数据
        $validatedData = $request->validate([
            'code' => 'string|required', // 假设code是唯一的
            'text' => 'string|nullable',
            'weight' => 'integer|nullable',
            'userId' => 'integer|required', // 假设每个游戏都需要一个user_id
        ]);
        // 创建新的游戏记录
        $game = Game::create($validatedData);

        // 如果创建成功，返回成功响应
        if ($game) {
            return Response::ok($game, "新增成功");
        }
        return Response::fail(null, "新增失败");
    }
}
